﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//int main()
//{
//  int a = 10000;//00000000 00000000 00100111 00010000
//  //              00       00		27		 10
//  FILE * pf = fopen("test.txt", "wb");
//  fwrite(&a, 4, 1, pf);
//  //⼆进制的形式写到⽂件中 
//  fclose(pf); 
//  pf = NULL;
//  return 0;
//}

//文件类型指针 FILE


//程序文件 源文件后缀.c 目标文件.obj .exe


//数据文件
 

//fopen函数打开文件
//FILE *fopen(const char *filename ,const char* mode)
//					文件名字        打开方式
// "r"只读
// "w"只写
//fclose函数关闭文件
// int fclose(FILE *stream)
//关闭文件
//int main()
//{
//	//FILE* pf=fopen("test.txt", "r");
//	//绝对路径
//	//FILE* pf = fopen("C:\\Users\\20557\\Desktop\\test.txt", "w");
//	//相对路径
//	//.   当前路径
//	//..  上一路径
//	//FILE* pf = fopen("./../test.txt", "w");
//	FILE* pf = fopen("./../x64/test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	else
//	{
//		printf("文件打开成功");
//	}
//	//写文件
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//顺序读写函数


////fputc 输出
//int main()
//{
//	FILE* pf=fopen("test.xtx", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写文件
//	/*fputc("a", pf);
//	fputc("b", pf);
//	fputc("c", pf);
//	fputc("d", pf);
//	fputc("e ", pf);*/
//	for (int a = 'a'; a <= 'z'; a++)
//	{
//		fputc(a, pf);
//	}
//	//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读取成功，返回ASCII码值
//	// 失败返回  EOF
//	//int ch = fgetc(pf);
//	//printf("%c ", ch);
//
//	// ch = fgetc(pf);
//	//printf("%c ", ch);
//
//  /*  ch = fgetc(pf);
//	printf("%c ", ch);*/
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c", ch);
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fputs
// int fputs(const char * str,FILE* )


//写一个字符串
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputs("hello world \n", pf);//不会主动换行
//	fputs("hello bit", pf);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fgets
// char * fgets(char * str,int num ,FILE *stream)
//读取一行数据
//int main()
//{
//	FILE* pf = fopen("tset.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	char arr[8];
//	fgets(arr, 8, pf);
//	//只读写8-1，留下一个给\0
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fprintf
// 写
//struct S
//{
//	int a ;
//	char b;
//	double c;
//};
//
//
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//int a = 200;
//	//char b = 'a';
//	//double c = 3.14;
//	//fprintf(pf, "%d %c %.2lf", a, b, c);
//	struct S s = { 200,'a',3.14 };
//	fprintf(pf, "%d %c %.2lf", s.a, s.b, s.c);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fscanf
//struct S
//{
//	int a ;
//	char b;
//	double c;
//};
//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	struct S s = { 0 };
//	fscanf(pf, "%d %c %lf",&(s.a),&(s.b), &s.c);
//	printf("%d %c %.2lf", s.a, s.b, s.c);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//对比一下函数
//scanf/fscanf/sscanf
//printf/fprintf/sprintf

//scanf(输入)printf(输出)  针对标准输入(stdin-键盘) 输出(stdout-屏幕)
//fscanf/fprintf			针对 所有输入流/所有输出流 的格式化的 输入/输出函数


//struct S
//	{
//		int a ;
//		char b;
//		double c;
//	};
//int main()
//{
//
//	int a = 200;
//	char b = 'a';
//	double c = 3.14;
//	fprintf(stdout, "%d %c %.2lf\n", a, b, c);
//	struct S s = { 200,'a',3.14 };
//	fprintf(stdout, "%d %c %.2lf", s.a, s.b, s.c);
//	//等价于
//	//printf("%d %c %.2lf", s.a, s.b, s.c);
//	return 0;
//}

//sscanf
//sprintf

//struct S 
//{
//	char a[20];
//	int b;
//	double c;
//};
//int main()
//{
//	char arr[30] = {0};
//	struct S s = { "hello",200 ,3.14 };
//	sprintf(arr, "%s %d %.2lf", s.a, s.b, s.c);
//	printf("字符串:%s\n", arr);
//
//	struct S s2 = { 0 };
//	sscanf(arr, "%s %d %lf", s2.a, &(s2.b), &(s2.c));
//	printf("结构体:%s %d %.2lf", s2.a, s2.b, s2.c);
//
//	return 0;
//}


//fread 二进制输入
// size_t fread(const void * tr,size_t size,size_t count,FILE* strem)
//					流,元素大小,元素个数 ,指针
//fwrite 二进制输出
//size_t fwrite(const void * tr,size_t size,size_t count,FILE* strem)
//				指针, 元素大小,元素个数 ,流	
//int main()
//{
//	FILE* pf = fopen("test.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//二进制的形式写文件
//	//int arr[5] = { 1,2,3,4,5 };
//	////fwrite(arr, sizeof(arr[0]), 5, pf);
//    //fwrite(arr, 20, 1, pf);
//
//	//二进制的形式读文件
//	int arr[5] = { 0 };
//	fread(arr, sizeof(int), 5, pf);
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//文件随机读写函数
//fseek
// int fseek ( FILE * stream, long int offset, int origin )
//SEEK_SET 文件开始位置
//SEEK_CUR 文件光标
//SEEK-END 文件末尾
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//
	int ch=fgetc(pf);
	fputc(ch, stdout); //a

	int a = fseek(pf, 3, SEEK_SET);

	 ch = fgetc(pf);//d
	fputc(ch, stdout);

	fclose(pf);
	pf = NULL;
	return 0;
}







